package com.witsight.platform.exception;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.witsight.platform.util.lang.StringUtil;

/**
 * 说明：业务异常的集合，需要一次抛出多个错误的
 * 
 * @Title: BusinessesException.java
 * @Package com.witsight.platform.exception
 * @See: {@link BaseException} 
 * Copyright: Copyright (c) 2017 
 * Company:sany huax witsight team by product
 * @author: penght
 * @date: 2017年9月11日 下午5:32:19
 * @version: V1.0
 *
 */
public class BusinessesException extends BaseException {
	private static final long serialVersionUID = -7894698490818480122L;

	// 业务异常的集合，需要一次抛出多个错误的
	private List<BusinessException> businessesException = new ArrayList<BusinessException>();
	// 业务异常的集合，需要一次抛出多个错误的(有目标字段的)
	private Map<String, List<BusinessException>> businessesMapException = new HashMap<String, List<BusinessException>>();

	public BusinessesException() {
		super("Businesses Exception");
	}

	/**
	 * 
	 * 说明： 构造函数
	 * 
	 * @Title:BusinessException.java
	 * @See: 构造函数
	 * @param message
	 *            错误消息
	 * @date 2016年6月1日 上午10:52:34
	 */
	public void addBusinessException(final String message) {
		BusinessException businessException = new BusinessException(message);
		businessesException.add(businessException);
	}

	/**
	 * 
	 * 说明：构造函数
	 * 
	 * @Title:BusinessException.java
	 * @See: 构造函数
	 * @param message
	 *            错误信息
	 * @param params
	 *            错误参数
	 * @date 2016年6月1日 上午10:52:30
	 */
	public void addBusinessException(final String message, final Object... params) {
		BusinessException businessException = new BusinessException(message, params);
		businessesException.add(businessException);
	}

	/**
	 * 
	 * 说明：构造函数
	 * 
	 * @Title:BusinessException.java
	 * @See: 构造函数
	 * @param fieldName
	 *            字段名，（字段的id）
	 * @param message
	 *            错误信息
	 * @param params
	 *            错误参数
	 * @date 2016年6月1日 上午10:52:25
	 */
	public void addBusinessException(final String message, final String fieldName, final Object... params) {
		if (StringUtil.isEmpty(fieldName)) {
			BusinessException businessException = new BusinessException(message, params);
			businessesException.add(businessException);
		} else {
			BusinessException businessException = new BusinessException(message, fieldName, params);
			List<BusinessException> businessesException = new ArrayList<BusinessException>();
			if (businessesMapException.containsKey(fieldName)) {
				businessesException = businessesMapException.get(fieldName);
				businessesException.add(businessException);
			} else {
				businessesException.add(businessException);
				businessesMapException.put(fieldName, null);
			}
		}
	}

	/**
	 * 
	 * 说明：判断是否是空的异常
	 * 
	 * @Title: isEmpty
	 * @See: {@link #isEmpty()}
	 * @author penght
	 * @return true :是空 false : 不是空
	 * @date: 2016年6月1日 上午11:14:31
	 */
	public boolean isEmpty() {
		if ((businessesException == null || businessesException.isEmpty())
		        && (businessesMapException == null || businessesMapException.isEmpty())) {
			return true;
		}
		return false;
	}
}
